package Question8_7;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
public class User {
private int id;
private UserStatus status = null;
private HashMap<Integer, PrivateChat> privateChats = new HashMap<Integer, PrivateChat>();
private ArrayList<GroupChat> groupChats = new ArrayList<GroupChat>();
private HashMap<Integer, AddRequest> receivedAddRequests = new HashMap<Integer, AddRequest>();
private HashMap<Integer, AddRequest> sentAddRequests = new HashMap<Integer, AddRequest>();
private HashMap<Integer, User> contacts = new HashMap<Integer, User>();
private String accountName;
private String fullName;
public User(int id, String accountName, String fullName) {
this.accountName = accountName;
this.fullName = fullName;
this.id = id;
}
public boolean sendMessageToUser(User toUser, String content) {
PrivateChat chat = privateChats.get(toUser.getId());
if (chat == null) {
chat = new PrivateChat(this, toUser);
privateChats.put(toUser.getId(), chat);
}
Message message = new Message(content, new Date());
return chat.addMessage(message);
}
public boolean sendMessageToGroupChat(int groupId, String content) {
GroupChat chat = groupChats.get(groupId);
if (chat != null) {
Message message = new Message(content, new Date());
return chat.addMessage(message);
}
return false;
}
public void setStatus(UserStatus status) {
this.status = status;
}
public UserStatus getStatus() {
return status;
}
public boolean addContact(User user) {
if (contacts.containsKey(user.getId())) {
return false;
} else {
contacts.put(user.getId(), user);
return true;
}
}
public void receivedAddRequest(AddRequest req) {
int senderId = req.getFromUser().getId();
if (!receivedAddRequests.containsKey(senderId)) {
receivedAddRequests.put(senderId, req);
}
}
public void sentAddRequest(AddRequest req) {
int receiverId = req.getFromUser().getId();
if (!sentAddRequests.containsKey(receiverId)) {
sentAddRequests.put(receiverId, req);
}
}
public void removeAddRequest(AddRequest req) {
if (req.getToUser() == this) {
receivedAddRequests.remove(req);
} else if (req.getFromUser() == this) {
sentAddRequests.remove(req);
}
}
public void requestAddUser(String accountName) {
UserManager.getInstance().addUser(this, accountName);
}
public void addConversation(PrivateChat conversation) {
User otherUser = conversation.getOtherParticipant(this);
privateChats.put(otherUser.getId(), conversation);
}
public void addConversation(GroupChat conversation) {
groupChats.add(conversation);
}
public int getId() {
return id;
}
public String getAccountName() {
return accountName;
}
public String getFullName() {
return fullName;
}
}